package ynu.edu.model.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import ynu.edu.common.domain.PageDTO;
import ynu.edu.common.domain.R;
import ynu.edu.model.entity.Text2Img;
import ynu.edu.model.service.Text2ImgService;


import java.util.Map;

/**
 * Text2Img控制器
 */
@Slf4j
@RestController
@RequestMapping("/text2img")
@Api(tags = "文本生成图像")
@RequiredArgsConstructor
public class Text2ImgController {

    private final Text2ImgService text2ImgService;


    /**
     * 分页查询生成记录
     * @param page 页码（从1开始）
     * @param size 每页大小
     * @param status 状态过滤（可选）
     * @param modelName 模型名称过滤（可选）
     * @return 分页结果
     */
    @GetMapping("/records")
    @ApiOperation("分页查询生成记录")
    public R<PageDTO<Text2Img>> getRecords(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size,
            @RequestParam(required = false) String status,
            @RequestParam(required = false) String modelName) {
        try {
            PageDTO<Text2Img> result = text2ImgService.getPageRecords(page, size, status, modelName);
            return R.ok(result);
        } catch (Exception e) {
            log.error("查询生成记录失败", e);
            return R.error("查询生成记录失败: " + e.getMessage());
        }
    }

    /**
     * 根据任务ID查询生成记录
     * @param taskId 任务ID
     * @return 生成记录
     */
    @GetMapping("/records/{taskId}")
    @ApiOperation("根据任务ID查询生成记录")
    public R<Text2Img> getRecordByTaskId(@PathVariable String taskId) {
        try {
            Text2Img record = text2ImgService.getByTaskId(taskId);
            
            if (record == null) {
                log.warn("未找到任务ID为{}的生成记录", taskId);
                return R.error("未找到对应的生成记录");
            }
            
            log.info("查询生成记录成功，任务ID: {}", taskId);
            return R.ok(record);
            
        } catch (Exception e) {
            log.error("查询生成记录失败，任务ID: {}", taskId, e);
            return R.error("查询生成记录失败: " + e.getMessage());
        }
    }

    /**
     * 获取生成统计信息
     * @return 统计信息
     */
    @GetMapping("/statistics")
    @ApiOperation("获取生成统计信息")
    public R<Map<String, Object>> getStatistics() {
        try {
            Map<String, Object> statistics = text2ImgService.getStatistics();
            log.info("获取统计信息成功");
            return R.ok(statistics);
        } catch (Exception e) {
            log.error("获取统计信息失败", e);
            return R.error("获取统计信息失败: " + e.getMessage());
        }
    }

    /**
     * 删除生成记录（逻辑删除）
     * @param taskId 任务ID
     * @return 删除结果
     */
    @DeleteMapping("/records/{taskId}")
    @ApiOperation("删除生成记录")
    public R<Boolean> deleteRecord(@PathVariable String taskId) {
        try {
            boolean result = text2ImgService.deleteByTaskId(taskId);
            
            if (result) {
                log.info("删除生成记录成功，任务ID: {}", taskId);
                return R.ok(true);
            } else {
                log.warn("未找到要删除的记录，任务ID: {}", taskId);
                return R.error("未找到要删除的记录");
            }
            
        } catch (Exception e) {
            log.error("删除生成记录失败，任务ID: {}", taskId, e);
            return R.error("删除生成记录失败: " + e.getMessage());
        }
    }
} 